# 课后问答题
# 1.什么是类什么是对象？
# 2.python中定义一个类的语法格式是什么？
# 3.类(class)由哪三个部分构成？
# 4.init方法有什么作用，如何定义？
# 5.方法中的"self"代表什么？
# 6.在类中定义init方法的时候第一个形参必须是self吗？self可以用其他东西代替吗？
# 7.Python面向对象中的魔术方法，是如何定义的，魔术方法需要开发人员去调用吗？
# 8.str方法可以没有返回值，这句话是否正确？
# 9.怎么判断属性和实例方法？
# 课后实操题
# 1.python中如何通过类创建对象，请用代码举例说明。
class Student:
    def run(self):#定义实例方法
        print('学生每天进行2000米的跑步训练')
        pass
    pass
xiaoli=Student()#创建一个对象
xiaoli.run()
# 2.如何在类中定义一个方法，请用代码举例说明。
#参考上述demo
# 3.定义一个水果类，然后通过水果类，创建苹果对象，橘子对象，西瓜对象并分别添加上颜色属性。
class Fruit:
    def __init__(self,name,color):
        '''

        :param name:
        :param color:
        '''
        self.color=color
        self.name=name
        pass
    def __str__(self):
        return '%s的颜色是%s'%(self.name,self.color)
    pass
pg=Fruit('苹果','红色')
pg.zj=10#通过实例名添加实例属性，已有值也可以这样进行修改，但不会影响其他实例中相应的实例属性的值
print(pg)
print('*'*40)
jz=Fruit('橘子','橙色')
print(jz)
print('*'*40)
xg=Fruit('西瓜','绿色')
print(pg)
# 4.请编写代码，验证self就是实例本身。
class Person:
    def weight(self):
        print('self=%s'%id(self))
    pass
liming=Person()
liming.weight()
print(id(liming))
# 5.定义一个Animal类
# (1).使用__init__初始化方法为对象添加初始属性，如颜色，名字年龄。
# (2).定义动物方法，如run，eat等方法，如调用eat方法时打印xx在吃东西。
# (3).定义一个__str__方法，输出对象的所有属性。
class Animal:
    def __init__(self,color,name,age):
        '''

        :param color:
        :param name:
        :param age:
        '''
        self.color = color
        self.name = name
        self.age = age
        pass
    def eat(self):
        print('%s在吃东西'%self.name)
        pass
    def run(self):
        print('%s在飞快的跑' % self.name)
        pass
    def __str__(self):
        return '%s的颜色是：%s，今年%d岁了'%(self.name,self.color,self.age)
    pass
tiger=Animal('黄色','东北虎',4)
tiger.run()
tiger.eat()
print(tiger)
# 6.复习双人决战